package cn.tedu.csmall.product.service.impl;

import cn.tedu.csmall.product.ex.ServiceException;
import cn.tedu.csmall.product.mapper.SKUMapper;
import cn.tedu.csmall.product.mapper.SPUMapper;
import cn.tedu.csmall.product.pojo.entity.SKU;
import cn.tedu.csmall.product.pojo.param.SKUAddNewParam;
import cn.tedu.csmall.product.pojo.vo.SKUListItemVO;
import cn.tedu.csmall.product.pojo.vo.SKUStandardVO;
import cn.tedu.csmall.product.pojo.vo.SPUStandardVO;
import cn.tedu.csmall.product.service.SKUService;
import cn.tedu.csmall.product.util.IdUtils;
import cn.tedu.csmall.product.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

@Service
@Slf4j
public class SKUServiceImpl implements SKUService {

    @Autowired
    SKUMapper skuMapper;
    @Autowired
    SPUMapper spuMapper;
    @Autowired
    IdUtils idUtils;

    @Override
    public void addNew(SKUAddNewParam skuAddNewParam) {
        log.debug("开始处理【新增SKU】的业务，参数：{}", skuAddNewParam);
        // 检查品牌：是否存在，是否启用
        Long spuId = skuAddNewParam.getSpuId();
        SPUStandardVO spu = spuMapper.getStandardById(spuId);
        if (spu == null) {
            String message = "新增SKU失败，SPU数据不存在！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }

        // 获取SKU ID
        Long skuId = idUtils.generateSkuId();

        // 创建SKu对象
        SKU sku = new SKU();
        // 复制属性值
        BeanUtils.copyProperties(skuAddNewParam, sku);
        // 补全属性值：id >>> 暂时随便写
        sku.setId(skuId);
        // 补全属性值
        sku.setAttributeTemplateId(spu.getAttributeTemplateId());
        sku.setAlbumId(spu.getAlbumId());
        sku.setPictures(spu.getPictures());
        sku.setSales(0);
        sku.setCommentCount(0);
        sku.setPositiveCommentCount(0);
        sku.setGmtCreate(LocalDateTime.now());
        sku.setGmtModified(LocalDateTime.now());
        skuMapper.insert(sku);
    }

    @Override
    public SKUStandardVO getStandardById(Long id) {
        log.debug("开始处理【根据主键Id查询SKU列表】的业务，ID值为：{}", id);
        SKUStandardVO result = skuMapper.getStandardById(id);
        if (result == null) {
            String message = "【根据ID查询SKU】失败，SKU数据不存在！";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }
        return result;
    }


    @Override
    public List<SKUListItemVO> listBySpuId(Long spuId) {
        List<SKUListItemVO> skuList = skuMapper.listBySpuId(spuId);
        if (skuList.size() == 0) {
            String message = "暂无SKU列表，请新增！";
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }
        return skuList;
    }
}
